package sueca2011;

import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author Renzo, Hugo
 */
public abstract class Jogador {
    private String nome;
    protected ArrayList<Carta> cartasIniciais;
    protected ArrayList<Carta> cartasNaMao;
    protected ArrayList<Carta> cartasPassadas;
    Time time;
    Jogada jogadaAtual;
    ArrayList<Jogada> historicoJogadas;


    public Jogador(String nome){
        this.nome = nome;
        this.time=null;
        cartasIniciais = new ArrayList<Carta>();
        cartasNaMao = new ArrayList<Carta>();
        cartasPassadas= new ArrayList<Carta>();
        historicoJogadas = new ArrayList<Jogada>();
    }

    protected abstract void escolheJogada(Carta carta);
    protected abstract void escolheJogada();

    public Jogada getJogadaEscolhida(){
        Jogada jogada =  this.jogadaAtual;
        this.jogadaAtual = null;
        return jogada;
    }

    public boolean hasJogada(){
        return this.jogadaAtual!=null;
    }


    public synchronized void jogadaFoiAceita(Carta carta){
        this.historicoJogadas.add(new Jogada(this, carta));
        cartasNaMao.remove(carta);
        this.cartasPassadas.add(carta);
        System.out.println("Jogada aceita!");
        notifyAll();
    }

    public synchronized  void jogadaNaoFoiAceita(Carta carta){
        System.out.println("Jogada Não foi aceita!");
        notifyAll();
    }

    public boolean temCartaComPuxada(int nipe){
        Iterator<Carta> it = cartasNaMao.iterator();
        Carta c;
        while(it.hasNext()){
            c = it.next();
            if(c.getNipe()==nipe)
                    return true;
        }
        return false;
    }


    public String getNome() {
        return nome;
    }



    public Time getTime() {
        return time;
    }


    public void setTime(Time time) {
        if(this.time==null)
            this.time = time;
    }

    public ArrayList<Carta> getCartasIniciais(){
        return this.cartasIniciais;
    }

    public void addCartaInicial(Carta carta){
        this.cartasIniciais.add(carta);
        this.cartasNaMao.add(carta);
    }

    public Jogada getUltimaJogada(){
        return this.historicoJogadas.get(this.historicoJogadas.size()-1);
    }
}
